#include <iostream>
#include <stdio.h>
using namespace std;
/*
int fprintf(FILE *stream, const char *format, ...);
功能：向指定的文件中输出一个格式串
参数1：文件指针
参数2：格式串，可以包含格式控制符，%d（整数）、%s(字符串)、%f(小数)、%lf(小数)
参数3：可变参数，输出项列表，参数个数由参数2中的格式控制符的个数决定
返回值：成功返回输出的字符个数，失败返回一个负数

int fscanf(FILE *stream, const char *format, ...);
功能：从指定的文件中以指定的格式读取数据，放入程序中
参数1：文件指针
参数2：格式串，可以包含格式控制符，%d（整数）、%s(字符串)、%f(小数)、%lf(小数)
参数3：可变参数，输入项地址列表，参数个数由参数2中的格式控制符的个数决定
返回值：成功返回读入的项数，失败返回EOF并置位错误码
 */

int main(int argc, const char *argv[])
{
    // 向标准输出文件指针中写入数据
    fprintf(stdout, "%d %lf %s\n", 520, 3.14, "I Love Xingqiu");

    // 从标准输入中读取数据到程序中来
    int num = 0;
    fscanf(stdin, "%d", &num); // 从标准输入缓冲区中以%d的格式读取一个整数
    printf("num = %d\n", num);
    // 对外部文件进行格式化读写
    FILE *fp = NULL;
    if ((fp = fopen("./usr.txt", "w")) == NULL) // 以只写的形式打开外部文件
    {
        perror("fopen error");
        return -1;
    }
    // 向文件中写入数据
    fprintf(fp, "%s %d", "admin", 123456); // 将两个不同的数据存放到文件中

    // 关闭文件
    fclose(fp);
    // 再次以只读的形式打开文件
    if ((fp = fopen("./usr.txt", "r")) == NULL) // 以只写的形式打开外部文件
    {
        perror("fopen error");
        return -1;
    }
    char usrName[20] = "";              // 存放用户名
    int pwd = 0;                        // 存放密码
    fscanf(fp, "%s %d", usrName, &pwd); // 从外部文件中分别读取一个字符串和一个整数放入程序中的
    // usrName和pwd中
    // 关闭
    fclose(fp);
    printf("usrName = %s, pwd = %d\n", usrName, pwd);
    return 0;
}
